﻿#include "pch.h"
#include "Const.h"
#include "SnakeBody.h"

/**
 * 构造方法。
 * @param drawer    绘图者
 * @param point     位置
 * @param type      类型
 */
SnakeBody::SnakeBody(CDC* drawer, CPoint* point, Type type): 
    mDrawer(drawer),
    mNext(NULL),
    mPosition(*point) {
    // 设置类型
    this->SetType(type);

    // 画自身
    this->Draw();
}

/**
 * 析构方法。
 */
SnakeBody::~SnakeBody() {
    if (mBrush != NULL) {
        delete mBrush;
    }
}

/**
 * 画自身。
 */
void SnakeBody::Draw() {
    mDrawer->SelectObject(mBrush);
    mDrawer->Ellipse(mPosition.x * Const::GRID_SIZE, mPosition.y * Const::GRID_SIZE,
        mPosition.x * Const::GRID_SIZE + Const::GRID_SIZE, mPosition.y * Const::GRID_SIZE + Const::GRID_SIZE);
}

/**
 * 将蛇身从原来的位置中抹除。
 */
void SnakeBody::Erase() {
    mDrawer->FillSolidRect(mPosition.x * Const::GRID_SIZE, mPosition.y * Const::GRID_SIZE,
        Const::GRID_SIZE, Const::GRID_SIZE, Const::GAME_BOARD_COLOR);
}

/**
 * 获取下一个蛇身。
 * @return 下一个蛇身
 */
SnakeBody* SnakeBody::GetNext() {
    return mNext;
}

/**
 * 获取位置。
 * @return 位置
 */
const CPoint* SnakeBody::GetPosition() {
    return &mPosition;
}

/**
 * 设置下一个蛇身。
 * @param next  下一个蛇身
 */
void SnakeBody::SetNext(SnakeBody* next) {
    mNext = next;
}

/**
 * 设置位置。
 * @param position  位置
 */
void SnakeBody::SetPosition(CPoint* position) {
    mPosition = *position;
}

/**
 * 设置类型。
 * @param type  类型
 */
void SnakeBody::SetType(Type type) {
    if (mBrush != NULL) {
        delete mBrush;
    }
    if (type == SNAKE) {
        mBrush = new CBrush(Const::SNAKE_COLOR);
    } else {
        mBrush = new CBrush(Const::APPLE_COLOR);
    }
}
